import {
    getToken
} from "./cookieMgr";

// utils/request.js
const BASE_URL = 'http://localhost:2303/api'; // 替换为你的基础URL

function request(options) {
    return new Promise((resolve, reject) => {
        // 获取本地存储中的token
        const token = getToken();
        uni.request({
            url: options.url,
            method: options.method || 'GET',
            data: options.data || {},
            header: {
                'Content-Type': 'application/json',
                'Authorization': token ? `Bearer ${token}` : '',
                ...options.headers
            },
            timeout: 10000, // 超时时间，单位毫秒
            success: (res) => {
                if (res.statusCode === 200) {
                    resolve(res.data);
                } else {
                    uni.showToast({
                        title: `请求失败，状态码：${res.statusCode}`,
                        icon: 'none'
                    });
                    reject(res);
                }
            },
            fail: (err) => {
                uni.showToast({
                    title: '网络请求失败，请检查网络',
                    icon: 'none'
                });
                reject(err);
            },
        });
    });
}

// 封装GET请求
function get(url, data = {}, options = {}) {
    return request({
        url: BASE_URL + url,
        method: 'GET',
        data,
        ...options
    });
}

// 封装POST请求
function post(url, data = {}, options = {}) {
    return request({
        url: BASE_URL + url,
        method: 'POST',
        data,
        ...options
    });
}

/**
 * 多文件上传方法
 * @param {Object} config 配置对象
 * @param {string} config.url 上传接口地址
 * @param {Object} config.data 请求参数（包含 files 文件数组）
 * @returns {Promise} 返回 Promise 对象
 */
export const uploadFiles = (url, data) => {
    // 从参数中提取文件列表
    const files = data.files;

    // 校验参数
    if (!url) return Promise.reject('缺少上传地址');
    if (!files || !Array.isArray(files) || files.length === 0) {
        return Promise.reject('缺少有效的文件列表');
    }

    // 过滤掉非文件路径的项
    const validFiles = files.filter(file => typeof file === 'string' && file.trim());

    // 准备其他表单参数（排除 files 属性）
    const formData = {
        ...data
    };
    delete formData.files;

    // 创建上传任务数组
    const uploadTasks = validFiles.map(file => {
        // 获取本地存储中的token
        const token = getToken();
        return new Promise((resolve, reject) => {
            uni.uploadFile({
                url: BASE_URL + url,
                filePath: file,
                header: {
                    'Authorization': token ? `Bearer ${token}` : '',
                },
                method: "post",
                name: 'file', // 根据后端接口调整字段名称
                formData,
                success: (res) => {
                    if (res.statusCode === 200) {
                        try {
                            // 尝试解析返回数据（根据实际接口调整）
                            const data = JSON.parse(res.data);
                            resolve(data);
                        } catch (e) {
                            resolve(res.data);
                        }
                    } else {
                        reject(res);
                    }
                },
                fail: (err) => {
                    reject(err);
                }
            });
        });
    });

    // 返回所有上传任务的 Promise
    return Promise.all(uploadTasks);
};

// 导出方法（修改最后一行）
export default {
    request,
    get,
    post,
    uploadFiles // 追加导出
}